home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / PROGBLER / ASMCODE2.LZH / COMPAQ.ASM < prev    next >
Assembly Source File  |  1983-08-28  |  4KB  |  99 lines

  1.            PAGE      52,132
  2. STACK           SEGMENT   BYTE STACK 'STACK'  ;STACK SEGMENT
  3.            DB         64 DUP ('STACK   ') ;INITIAL STACK VALUE
  4. STACK           ENDS              ;STACK SEGMENT END
  5.            PAGE
  6. CSEG           SEGMENT   BYTE PUBLIC 'CODE'  ;CODE SEGMENT
  7.            ASSUME    CS:CSEG,ES:CSEG     ;ASSUME'S
  8. INT5_OFF       EQU         14H         ;INT 5 OFFSET ADDRESS
  9. INT5_SEG       EQU         16H         ;INT 5 SEG. ADDRESS
  10. OLD_SEG        EQU         -2          ;OLD SEQ. OFFSET
  11. OLD_OFF        EQU         -4          ;OLD OFFSET OFFSET
  12. INT_27           EQU         27CDH         ;INT 27 OP-CODE
  13. CODE_9           EQU         9H          ;FUNCTION CODE 9
  14. INT_21           EQU         21H         ;INT 21 REQUEST VALUE
  15. RET           EQU         0H          ;RETURN CODE OFFSET
  16. BASIC_DS       EQU         510H         ;BASIC DS SAVE ADDR.
  17. PROTECT        EQU         59BH         ;PROT OFFSET (COMPAQ)
  18. POINT           EQU         8             ;OFFSET TO IDENT
  19. BYTES           EQU         4             ;SIZE OF IDENT
  20. PRE           EQU         100H         ;PREFIX SIZE
  21.            PAGE
  22. START           LABEL     NEAR         ;START OF BODY
  23. IDENT           DB         'PROT'              ;PROGRAM IDENT.
  24. PRTSC_OFF       DW         0             ;PRINT SCREEN OFFSET
  25. PRTSC_SEG       DW         0             ;PRINT SCREEN SEGMENT
  26. INT           LABEL     NEAR         ;INTERRUPT ROUTINE
  27.            PUSH      DS          ;SAVE DS REGISTER
  28.            PUSH      AX          ;SAVE AX REGISTER
  29.            XOR         AX,AX         ;ZERO AX REGISTER
  30.            MOV         DS,AX         ;LOWER CORE POINTER
  31.            MOV         DS,[DS:BASIC_DS]     ;BASIC WORK AREA
  32.            XOR         AL,AL         ;ZERO AL REGISTER
  33.            MOV         [DS:PROTECT],AL     ;UN-PROTECT PROGRAM
  34.            POP         AX          ;RESTORE AX REGISTER
  35.            POP         DS          ;RESTORE DS REGISTER
  36.            STI                 ;ALLOW INTERRUPTS
  37.            IRET              ;INTERRUPT RETURN
  38. I_END           EQU         $             ;RESIDENT CODE END
  39.            PAGE
  40. INITIAL        PROC      FAR         ;INITIALIZATION CODE
  41.            PUSH      DS          ;SAVE RETURN SEGMENT
  42.            MOV         AX,INT_27         ;GET INT 27 OP-CODE
  43.            MOV         [DS:RET],AX     ;CHANGE RETURN CODE
  44.            XOR         AX,AX         ;ZERO AX REGISTER
  45.            PUSH      AX          ;SAVE RETURN OFFSET
  46.            MOV         DS,AX         ;POINT TO LOWER CORE
  47.            CLD                 ;SET DIRECTION FLAG
  48.            MOV         DX,CS         ;GET POINTER TO CODE
  49.            MOV         ES,DX         ;POINT TO CODE
  50.            MOV         CX,BYTES         ;GET LENGTH OF IDENT
  51.            MOV         DI,OFFSET IDENT     ;POINT TO IDENT
  52.            MOV         BX,[DS:INT5_SEG]     ;GET INT 5 SEGMENT
  53.            MOV         SI,[DS:INT5_OFF]     ;GET INT 5 OFFSET
  54.            MOV         DS,BX         ;POINT TO INT 5
  55.            SUB         SI,POINT         ;POINT TO ID LOC
  56.            REPZ      CMPSB         ;CHECK IF LOADED
  57.            JNE         LOAD         ;GO LOAD IF NOT
  58.            PAGE
  59. UNLOAD           LABEL     NEAR         ;UN-LOAD CODE
  60.            MOV         DS,AX         ;POINT TO LOWER CORE
  61.            MOV         SI,[DS:INT5_OFF]     ;GET INT 5 OFFSET
  62.            MOV         DS,BX         ;POINT TO INT 5
  63.            MOV         BX,[OLD_SEG][SI]     ;GET OLD SEGMENT
  64.            MOV         CX,[OLD_OFF][SI]     ;GET OLD OFFSET
  65.            MOV         DS,AX         ;POINT TO LOWER CORE
  66.            MOV         [DS:INT5_SEG],BX     ;RESTORE SEGMENT
  67.            MOV         [DS:INT5_OFF],CX     ;RESTORE OFFSET
  68.            MOV         DS,DX         ;POINT TO CODE
  69.            MOV         DX,OFFSET OFF     ;POINT TO OFF MESS.
  70.            MOV         AH,CODE_9         ;GET DESIRED CODE
  71.            INT         INT_21         ;PRINT MESSAGE
  72.            MOV         DX,OFFSET START     ;GET BODY OFFSET
  73.            PAGE
  74.            JMP         EXIT         ;GO EXIT FOR GOOD
  75. LOAD           LABEL     NEAR         ;LOAD CODE
  76.            MOV         DS,AX         ;POINT TO LOWER CORE
  77.            MOV         AX,[DS:INT5_OFF]     ;INTERRUPT 5 OFFSET
  78.            MOV         [CS:PRTSC_OFF],AX     ;SAVE INT 5 OFFSET
  79.            MOV         AX,[DS:INT5_SEG]     ;INTERRUPT 5 SEGMENT
  80.            MOV         [CS:PRTSC_SEG],AX     ;SAVE INT 5 SEGMENT
  81.            CLI                 ;NO INTERRUPTIONS
  82.            MOV         AX,OFFSET INT     ;GET INTERRUPT OFFSET
  83.            MOV         [DS:INT5_OFF],AX     ;SAVE INT 5 OFFSET
  84.            MOV         [DS:INT5_SEG],CS     ;SAVE INT 5 SEGMENT
  85.            STI                 ;ALLOW INTERRUPTS
  86.            MOV         DS,DX         ;POINT TO CODE
  87.            MOV         DX,OFFSET ON     ;POINT TO ON MESS.
  88.            MOV         AH,CODE_9         ;GET DESIRED CODE
  89.            INT         INT_21         ;PRINT MESSAGE
  90.            MOV         DX,OFFSET I_END+PRE ;GET END POINTER
  91.            PAGE
  92. EXIT           LABEL     NEAR         ;EXIT CODE
  93.            RET                 ;TERMINATE RESIDENT
  94. INITIAL        ENDP              ;END OF INITIAL
  95. ON           DB         "Protect Bypass Enabled$"
  96. OFF           DB         "Protect Bypass Disabled$"
  97. CSEG           ENDS              ;CODE SEGMENT END
  98.            END         INITIAL         ;SET TRANSFER ADDRESS
  99.